Today, many integrated circuits, such as memories and microprocessors, are configurable in one or more modes or configurations. Typically, such a circuit receives a mode or configuration signal, and in response thereto, implements, i.e., enables, the mode or configuration that the signal represents, i.e., identifies. For example, a memory device may be configurable in eight different test configurations, one of which is a charge-pump test mode, and have three configuration pins that receive a 3-bit digital configuration signal from an external device, such as a testing apparatus. While configured in the charge-pump test mode, the memory device couples the normally inaccessible output voltage of an internal charge pump to an external pin for measurement by a testing apparatus. In response to this state of the configuration signal, the memory device activates internal circuitry, such as multiplexers and switches, that couples the output node of the charge pump to a selected external pin. The testing apparatus can then measure the voltage at the external pin and determine whether or not the charge pump is operating properly. After it has finished checking the memory device, the testing apparatus generates the configuration signal having a state that represents an operational or normal configuration. In response to this state, the memory device enables itself in the normal configuration.
A problem with existing configurable integrated circuits is that it is often difficult or impossible to determine which configuration or configurations are enabled in the circuit. Of course, one can record the state or sequence of states of the configuration signal that the integrated circuit receives, and determine from this state or sequence of states the current configuration or configurations that the circuit should have enabled. However, a transmission error, such as a software glitch, noise glitch, or a loose electrical connection, may cause the circuit to receive an undesired and unrecorded configuration state. Thus, the possibility of such transmission errors makes this recording procedure unreliable.
Furthermore, because it is difficult to accurately determine the configurations that are enabled in an integrated circuit, the debugging procedures that one uses to determine the cause of a problem or failure detected in the circuit are often complex and relatively inaccurate. With reference to the charge-pump example, if the testing apparatus finds that the voltage at the external pin is unacceptable for a charge-pump voltage, there exist multiple possible causes of the unacceptable voltage. A first possibility is that the charge pump is defective. A second possibility is that the configuration circuitry of the integrated circuit is defective. A third possibility is that the testing apparatus inadvertently instructed the circuit to enable a configuration other than the charge-pump test mode. Thus, without knowing which configurations that the circuit has actually enabled, one must often use a complex or relatively unreliable debugging procedure to determine if the charge pump is truly defective, or if the integrated circuit failed to enable the proper configuration.
For example, one debugging procedure for determining the cause of such a detected problem or failure is to input to the circuit the proper state of the configuration signal in an attempt to reconfigure the circuit. Such a procedure, however, works only if the proper configuration state is known, and if neither the configuration circuitry nor the charge pump is defective. Another procedure is to physically probe the internal nodes of the integrated circuit. Such probing, however, is often costly and time consuming, and may be impractical or even impossible once the circuit has been packaged.